#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;

/*
如果字符串中不含有任何 'aaa'，'bbb' 或 'ccc' 这样的字符串作为子串，那么该字符串就是一个「快乐字符串」。

给你三个整数 a，b ，c，请你返回 任意一个 满足下列全部条件的字符串 s：

s 是一个尽可能长的快乐字符串。
s 中 最多 有a 个字母 'a'、b 个字母 'b'、c 个字母 'c' 。
s 中只含有 'a'、'b' 、'c' 三种字母。
如果不存在这样的字符串 s ，请返回一个空字符串 ""。

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/longest-happy-string
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
*/

class Solution
{
public:
    string longestDiverseString(int a, int b, int c)
    {
        string res;
        vector<pair<int, char>> hashmap{{a, 'a'}, {b, 'b'}, {c, 'c'}};
        while (true)
        {
            sort(rbegin(hashmap), rend(hashmap)); //不能使用.begin()
            int pre = res.size();
            for (auto [count, c] : hashmap)
            {
                if (count == 0 || res.size() >= 2 && c == res.back() && c == res[res.size() - 2])
                    continue;
                res += c;
                count--;
                break;
            }
            if (pre == res.size())
                break;
        }
        return res;
    }
};